﻿/* **************************************************************************
 *
 * Copyright 2007-2010 Jeff Hardy
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * *************************************************************************/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
using NWSGI;

namespace HttpListenerHost
{
    class Program
    {
        static void Main(string[] args)
        {
            IWsgiConfig config = WsgiSection.Load();
            Wsgi wsgi = new Wsgi(config);

            using(HttpListener http = new HttpListener())
            {
                http.Prefixes.Add("http://*:8082/");
                http.Start();

                Console.WriteLine("Listening...");

                while(true)
                {
                    HttpListenerContext context = http.GetContext();

                    try
                    {
                        wsgi.Run(new NWSGI.HttpListener.Context(context, config));
                    }
                    catch(Exception e)
                    {
                        Console.WriteLine("Exception: {0}", e.Message);
                        context.Response.StatusCode = 500;
                    }

                    Console.WriteLine("{0} {1} [{2}]", context.Request.HttpMethod, context.Request.RawUrl, context.Response.StatusDescription);

                    context.Response.Close();
                }
            }
        }
    }
}
